package com.study.cloud.gateway.common.rule;

import com.study.cloud.gateway.common.rule.invoker.ServiceInvoker;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Map;
import java.util.Objects;

/**
 * 服务的定义信息
 * 资源服务定义类
 * @author wangwancheng
 * @create 2025/7/19 14:09
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ServiceDefinition implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 服务唯一标识
     */
    private String uniqueId;
    /**
     * 服务id
     */
    private String serviceId;
    /**
     * 服务版本
     */
    private String version;
    /**
     * 服务协议 http dubbo
     */
    private String protocol;
    /**
     * 定义具体服务路径的匹配规则
     */
    private String patternPath;
    /**
     * 环境名称
     */
    private String envType;
    /**
     * 服务是否启用
     */
    private Boolean enable = true;

    private Map<String/**invokerPath**/, ServiceInvoker> invokeMap ;


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        ServiceDefinition that = (ServiceDefinition) o;
        return Objects.equals(uniqueId, that.uniqueId) ;
    }

    @Override
    public int hashCode() {
        return Objects.hash(uniqueId);
    }
}
